package com.atguigu.gmall.order.service;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface OrderService extends IService<OrderInfo> {

    /**
     * 保存订单
     * @param orderInfo
     * @return
     */
    Long saveOrderInfo(OrderInfo orderInfo);

    /**
     * 生产流水号
     * @param userId
     * @return
     */
    String getTradeNo(String userId);

    /**
     * 比较流水号
     * @param userId 获取缓存中的流水号
     * @param tradeCodeNo   页面传递过来的流水号
     * @return
     */
    boolean checkTradeCode(String userId, String tradeCodeNo);


    /**
     * 删除流水号
     * @param userId
     */
    void deleteTradeNo(String userId);

    /**
     * 验证库存
     * @param skuId
     * @param skuNum
     * @return
     */
    boolean checkStock(Long skuId, Integer skuNum);

    //            更该订单状态
    void updateOrderStatus(Long orderId);

    /**
     * 根据订单id和ProcessStatus更该订单状态
     * @param orderId
     * @param processStatus
     */
    void updateOrderStatusList(Long orderId, ProcessStatus processStatus);


    /**
     * 根据订单id获取订单信息
     * @param orderId
     * @return
     */
    OrderInfo getOrderInfo(Long orderId);

    //                更改订单状态减库存
    void sendOrderStatus(Long orderId);

    //        根据数据拆分订单
    List<OrderInfo> orderSplitOrder(String orderId, String wareSkuMap);

    //        转orderInfo转化为map在转json数据返回
    public Map initJsonMap(OrderInfo orderInfo);

//    关闭支付和订单状态
    void updateOrderStatus(Long orderId, String flag);
}
